package com.sweet.pay.utils;


import org.springframework.util.StringUtils;

import java.math.BigDecimal;

/**
 * Created by sweet on 2018/1/5.
 * ---------------------------
 */
public final class DoubleUtils {

  private DoubleUtils() {
    throw new RuntimeException();
  }


  public static String add(String d1, String d2) {

    BigDecimal decimal1 = new BigDecimal(d1);
    BigDecimal decimal2 = new BigDecimal(d2);

    return decimal1.add(decimal2).toString();
  }

  /**
   * 浮点数进行精确 减法计算 d1-d2
   *
   * @param d1
   * @param d2
   * @return 返回 d1 - d2
   */
  public static String subtract(String d1, String d2) {
    if ("0.0".equals(d2) || "0.00".equals(d2)) {
      return "0.0";
    }
    BigDecimal decimal1 = new BigDecimal(d1);
    BigDecimal decimal2 = new BigDecimal(d2);

    return decimal1.subtract(decimal2).toString();
  }

  /**
   * 浮点数进行精确(保留两位小数) 乘法计算 d1*d2
   *
   * @param d1
   * @param d2
   * @return 返回 d1 * d2
   */

  public static String multiply(String d1, String d2) {
    BigDecimal decimal1 = new BigDecimal(d1);
    BigDecimal decimal2 = new BigDecimal(d2);
    BigDecimal decimal3 = new BigDecimal("1");

    return decimal1.multiply(decimal2).divide(decimal3, 2, BigDecimal.ROUND_HALF_UP).toString();
  }

  /**
   * 浮点数进行精确(保留两位小数) 除法计算 d1/d2
   *
   * @param d1
   * @param d2
   * @return 返回 d1 / d2
   */
  public static String divide(String d1, String d2) {

    BigDecimal decimal1 = new BigDecimal(d1);
    BigDecimal decimal2 = new BigDecimal(d2);

    return decimal1.divide(decimal2, 2, BigDecimal.ROUND_HALF_UP).toString();
  }

  public static String compute(String number1, String operator, String number2) {
    String n1 = StringUtils.isEmpty(number1) ? "0.0" : number1.trim();
    String n2 = StringUtils.isEmpty(number2) ? "0.0" : number2.trim();
    String operatorS = operator.trim();

    switch (operatorS) {
      case "+":
        return add(n1, n2);

      case "-":
        return subtract(n1, n2);

      case "*":
        return multiply(n1, n2);

      case "/":
        return divide(n1, n2);

      default:
        throw new RuntimeException("operator 仅支持 + - * /");
    }
  }

}

